
package com.zsrt.day20170505.homework.ch02;

/**
 * 栈     先进后出  
 * @author jmj
 * @date 2017年5月5日
 * @time 下午4:00:31
 */
public class Stack {

	private Node head;

	/**
	 * @param head the head to set
	 */
	public void setHead(Node head) {
		this.head = head;
	}
	
	/**
	 * 入栈    在头结点之后加入新的节点
	 * @param node
	 */

	public void push(Node node){
		Node p = this.head;
		if(p.getNext() !=null){
			//加入以后的节点
			node.setNext(p.getNext());
			p.setNext(node);
		}else{
			//加入第一个节点
			p.setNext(node);
		}
	}
	
	/**
	 * 出栈  1：删除1个节点   2：拿到被你删除的节点  3：为了把证出栈的效率  拿的都是头结点的下一个节点
	 * @return
	 */
	public Node pop(){
		
		Node pNode = head;
		Node result = null;
		if(pNode.getNext() != null){
			//拿到被你删除的节点
			result = pNode.getNext();
			//删除1个节点
			pNode.setNext(pNode.getNext().getNext());
		}else{
			System.out.println("栈已空");
		}
		
		return result ;
	}
	
	/**
	 * 打印所有的节点
	 */
	public void printStack(){
		Node pNode = this.head;
		
		while(true){
			
			pNode = pNode.getNext();
			if(pNode != null){
				System.out.print(pNode.getData()+"---->");
			}else{
				break;
			}
		}
		System.out.println();
	}
}
